/**
 * 迭代器
 * @param items     目标元素标签名
 * @param container 父容器ID
 */
var Iterator = function(items, container) {
		// 获取父容器
	var container = container && document.getElementById(container) || document,
		// 获取元素
		items = container.getElementsByTagName(items),
		// 获取元素长度
		length = items.length,
		// 当前索引值，默认：0
		index = 0;
	// 缓存数组的splice方法
	var splice = [].splice;
	return {
		// 获取第一个元素
		first: function() {
			index = 0;				// 矫正当前索引
			return items[index];	// 获取第一个元素
		},
		// 获取最后一个元素
		last: function() {
			index = length - 1;		// 矫正当前索引
			return items[index];	// 获取最后一个元素
		},
		// 获取前一个元素
		pre: function() {
			// 计算索引位置
			index = --index < 0 ? length - 1 : index;
			return items[index];
		},
		// 获取后一个元素
		next: function() {
			// 计算索引位置
			index = ++index < length ? index : 0;
			return items[index];
		},
		// 获取某个元素
		get: function(num) {
			// 如果 num>=0 正向获取，否则逆向获取
			index = num >= 0 ? num % length : num % length + length;
			return items[index];
		},
		// 对每一个元素执行某方法
		dealEach: function(fn) {
			// 第一个参数为回调，第二个参数开始为回调函数中参数
			var args = splice.call(arguments, 1);
			// 遍历元素
			for (var i = 0; i < length; i++) {
				// 对元素执行回调函数
				fn.apply(items[i], args);
			}
		},
		// 对某一个元素执行某方法
		dealItem: function(num, fn) {
			// 对元素执行回调函数，第三个参数开始为回调函数中的参数
			fn.apply(this.get(num), splice.call(arguments, 2));
		},
		// 排他方式处理某元素
		exclusive: function(num, allFn, numFn) {
			this.dealEach(allFn);
			// 如果 num 类型为是数组
			if (Object.prototype.toString.call(num) === '[object Array]') {
				// 遍历 num 数组
				for (var i = 0, len = num.length; i < len; i++) {
					// 分别处理数组中每一个元素
					this.dealItem(num[i], numFn);
				}
			} else {
				// 处理第num个元素
				this.dealItem(num, numFn);
			}
		},
	};
}
